<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
        Aper&ccedil;u et liste des fonctionnalit&eacute;s des testeurs unitaires PHP et web de SimpleTest PHP
    </title>
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
</head>
<body>
<div class="menu_back">
<div class="menu">
<a href="index.html">SimpleTest</a>
                |
                <a href="overview.html">Overview</a>
                |
                <a href="unit_test_documentation.html">Unit tester</a>
                |
                <a href="group_test_documentation.html">Group tests</a>
                |
                <a href="mock_objects_documentation.html">Mock objects</a>
                |
                <a href="partial_mocks_documentation.html">Partial mocks</a>
                |
                <a href="reporter_documentation.html">Reporting</a>
                |
                <a href="expectation_documentation.html">Expectations</a>
                |
                <a href="web_tester_documentation.html">Web tester</a>
                |
                <a href="form_testing_documentation.html">Testing forms</a>
                |
                <a href="authentication_documentation.html">Authentication</a>
                |
                <a href="browser_documentation.html">Scriptable browser</a>
</div>
</div>
<h1>Apercu de SimpleTest</h1>
        This page...
        <ul>
<li>
            <a href="#resume">R&eacute;sum&eacute; rapide</a> de l'outil SimpleTest pour PHP.
        </li>
<li>
            <a href="#fonctionnalites">La liste des fonctionnalites</a>, &agrave; la fois pr&eacute;sentes et &agrave; venir.
        </li>
<li>
            Il y a beaucoup de <a href="#ressources">ressources sur les tests unitaires</a> sur le web.
        </li>
</ul>
<div class="content">
        <p>
<a class="target" name="resume">
<h2>Qu'est-ce que SimpleTest ?</h2>
</a>
</p>
            <p>
                Le coeur de SimpleTest est un framework de test construit autour de classes de sc&eacute;narios de test. Celles-ci sont &eacute;crites comme des extensions des classes premi&egrave;res de sc&eacute;narios de test, chacune &eacute;largie avec des m&eacute;thodes qui contiennent le code de test effectif. Les scripts de test de haut niveau invoque la m&eacute;thode <span class="new_code">run()</span> &agrave; chaque sc&eacute;nario de test successivement. Chaque m&eacute;thode de test est &eacute;crite pour appeler des assertions diverses que le d&eacute;veloppeur suppose &ecirc;tre vraies, <span class="new_code">assertEqual()</span> par exemple. Si l'assertion est correcte, alors un succ&egrave;s est exp&eacute;di&eacute; au rapporteur observant le test, mais toute erreur d&eacute;clenche une alerte et une description de la dissension.
            </p>
            <p>
                Un <a href="unit_test_documentation.html">sc&eacute;nario de test</a> ressemble &agrave;...
<pre>
class <strong>MyTestCase</strong> extends UnitTestCase {
    <strong>
    function testLog() {
        $log = &amp;new Log('my.log');
        $log-&gt;message('Hello');
        $this-&gt;assertTrue(file_exists('my.log'));
    }</strong>
}
</pre>
            </p>
            <p>
                Ces outils sont con&ccedil;us pour le d&eacute;veloppeur. Les tests sont &eacute;crits en PHP directement, plus ou moins simultan&eacute;ment avec la construction de l'application elle-m&ecirc;me. L'avantage d'utiliser PHP lui-m&ecirc;me comme langage de test est qu'il n'y a pas de nouveau langage &agrave; apprendre, les tests peuvent commencer directement et le d&eacute;veloppeur peut tester n'importe quelle partie du code. Plus simplement, toutes les parties qui peuvent &ecirc;tre acc&eacute;d&eacute;es par le code de l'application peuvent aussi &ecirc;tre acc&eacute;d&eacute;es par le code de test si ils sont tous les deux dans le m&ecirc;me langage.
            </p>
            <p>
                Le type de sc&eacute;nario de test le plus simple est le <span class="new_code">UnitTestCase</span>. Cette classe de sc&eacute;nario de test inclut les tests standards pour l'&eacute;galit&eacute;, les r&eacute;f&eacute;rences et l'appariement de motifs (via les expressions rationnelles). Ceux-ci testent ce que vous seriez en droit d'attendre du r&eacute;sultat d'une fonction ou d'une m&eacute;thode. Il s'agit du type de test le plus commun pendant le quotidien du d&eacute;veloppeur, peut-&ecirc;tre 95% des sc&eacute;narios de test.
            </p>
            <p>
                La t&acirc;che ultime d'une application web n'est cependant pas de produire une sortie correcte &agrave; partir de m&eacute;thodes ou d'objets, mais plut&ocirc;t de produire des pages web. La classe <span class="new_code">WebTestCase</span> teste des pages web. Elle simule un navigateur web demandant une page, de fa&ccedil;on exhaustive : cookies, proxies, connexions s&eacute;curis&eacute;es, authentification, formulaires, cadres et la plupart des &eacute;l&eacute;ments de navigation. Avec ce type de sc&eacute;nario de test, le d&eacute;veloppeur peut garantir que telle ou telle information est pr&eacute;sente dans la page et que les formulaires ainsi que les sessions sont g&eacute;r&eacute;s comme il faut.
            </p>
            <p>
                Un <a href="web_tester_documentation.html">sc&eacute;nario de test web</a> ressemble &agrave;...
<pre>
class <strong>MySiteTest</strong> extends WebTestCase {
    <strong>
    function testHomePage() {
        $this-&gt;get('http://www.my-site.com/index.php');
        $this-&gt;assertTitle('My Home Page');
        $this-&gt;clickLink('Contact');
        $this-&gt;assertTitle('Contact me');
        $this-&gt;assertWantedPattern('/Email me at/');
    }</strong>
}
</pre>
            </p>
        
        <p>
<a class="target" name="fonctionnalites">
<h2>Liste des fonctionnalites</h2>
</a>
</p>
            <p>
                Ci-dessous vous trouverez un canevas assez brut des fonctionnalit&eacute;s &agrave; aujourd'hui et pour demain, sans oublier leur date approximative de publication. J'ai bien peur qu'il soit modifiable sans pr&eacute;-avis &eacute;tant donn&eacute; que les jalons d&eacute;pendent beaucoup sur le temps disponible. Les trucs en vert ont &eacute;t&eacute; cod&eacute;s, mais pas forc&eacute;ment d&eacute;j&agrave; rendus public. Si vous avez une besoin pressant pour une fonctionnalit&eacute; verte mais pas encore publique alors vous devriez retirer le code directement sur le  CVS chez SourceFourge. Une fonctionnalit&eacute;e publi&eacute;e est indiqu&eacute; par "Fini".
                <table>
<thead>
                    <tr>
<th>Fonctionnalit&eacute;</th><th>Description</th><th>Publication</th>
</tr>
                    </thead>
<tbody>
<tr>
                        <td>Sc&eacute;nariot de test unitaire</td>
                        <td>Les classes de test et assertions de base</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Affichage HTML</td>
                        <td>L'affichage le plus simple possible</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Autochargement des sc&eacute;narios de test</td>
                        <td>Lire un fichier avec des sc&eacute;narios de test et les charger dans un groupe de tests automatiquement</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>G&eacute;n&eacute;rateur de code d'objets fantaisie</td>
                        <td>Des objets capable de simuler d'autres objets, supprimant les d&eacute;pendances dans les tests</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Bouchons serveur</td>
                        <td>Des objets fantaisie sans r&eacute;sultat attendu &agrave; utiliser &agrave; l'ext&eacute;rieur des sc&eacute;narios de test, pour le prototypage par exemple.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Int&eacute;gration d'autres testeurs unitaires</td>
                        <td>
                            La capacit&eacute; de lire et simuler d'autres sc&eacute;narios de test en provenance de PHPUnit et de PEAR::Phpunit.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sc&eacute;nario de test web</td>
                        <td>Appariement basique de motifs dans une page t&eacute;l&eacute;charg&eacute;e.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Analyse de page HTML</td>
                        <td>Permet de suivre les liens et de trouver la balise de titre</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Simulacre partiel</td>
                        <td>Simuler des parties d'une classe pour tester moins qu'une classe ou dans des cas complexes.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Gestion des cookies Web</td>
                        <td>Gestion correcte des cookies au t&eacute;l&eacute;chargement d'une page.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Suivi des redirections</td>
                        <td>Le t&eacute;l&eacute;chargement d'une page suit automatiquement une redirection 300.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Analyse d'un formulaire</td>
                        <td>La capacit&eacute; de valider un formulaire simple et d'en lire les valeurs par d&eacute;faut.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Interface en ligne de commande</td>
                        <td>Affiche le r&eacute;sultat des tests sans navigateur web.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Mise &agrave; nu des attentes d'une classe</td>
                        <td>Peut cr&eacute;er des tests pr&eacute;cis avec des simulacres ainsi que des sc&eacute;narios de test.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sortie et analyse XML</td>
                        <td>Permet de tester sur plusieurs h&ocirc;tes et d'int&eacute;grer des extensions d'acceptation de test.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sc&eacute;nario de test en ligne de commande</td>
                        <td>Permet de tester des outils ou scripts en ligne de commande et de manier des fichiers.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Compatibilit&eacute; avec PHP Documentor</td>
                        <td>G&eacute;n&eacute;ration automatique et compl&egrave;te de la documentation au niveau des classes.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Interface navigateur</td>
                        <td>Mise &agrave; nu des niveaux bas de l'interface du navigateur web pour des sc&eacute;narios de test plus pr&eacute;cis.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Authentification HTTP</td>
                        <td>T&eacute;l&eacute;chargement des pages web prot&eacute;g&eacute;es avec une authentification basique seulement.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Boutons de navigation d'un navigateur</td>
                        <td>Arri&egrave;re, avant et recommencer</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support de SSL</td>
                        <td>Peut se connecter &agrave; des pages de type https.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support de proxy</td>
                        <td>Peut se connecter via des proxys communs</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support des cadres</td>
                        <td>G&egrave;re les cadres dans les sc&eacute;narios de test web.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Test de l'upload de fichier</td>
                        <td>Peut simuler la balise input de type file</td>
                        <td style="color: red;">1.0.1</td>
                    </tr>
                    <tr>
                        <td>Am&eacute;lioration sur la machinerie des rapports</td>
                        <td>Retouche sur la transmission des messages pour une meilleur coop&eacute;ration avec les IDEs</td>
                        <td style="color: red;">1.1</td>
                    </tr>
                    <tr>
                        <td>Am&eacute;lioration de l'affichage des tests</td>
                        <td>Une meilleure interface graphique web, avec un arbre des sc&eacute;narios de test.</td>
                        <td style="color: red;">1.1</td>
                    </tr>
                    <tr>
                        <td>Localisation</td>
                        <td>Abstraction des messages et g&eacute;nration du code &agrave; partir de fichiers XML.</td>
                        <td style="color: red;">1.1</td>
                    </tr>
                    <tr>
                        <td>Simulation d'interface</td>
                        <td>Peut g&eacute;n&eacute;rer des objets fantaisie tant vers des interfaces que vers des classes.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                    <tr>
                        <td>Test sur es exceptions</td>
                        <td>Dans le m&ecirc;me esprit que sur les tests des erreurs PHP.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                    <tr>
                        <td>Rercherche d'&eacute;l&eacute;ments avec XPath</td>
                        <td>Peut utiliser Tidy HTML pour un appariement plus rapide et plus souple.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                </tbody>
</table>
                La migration vers PHP5 commencera juste apr&egrave;s la s&eacute;rie des 1.0, &agrave; partir de l&agrave; PHP4 ne sera plus support&eacute;. SimpleTest est actuellement compatible avec PHP5 mais n'utilisera aucune des nouvelles fonctionnalit&eacute;s avant la version 2.
            </p>
        
        <p>
<a class="target" name="ressources">
<h2>Ressources sur le web pour les tests</h2>
</a>
</p>
            <p>
                Le processus est au moins aussi important que les outils. Le type de proc&eacute;dure que fait un usage le plus intensif des outils de test pour d&eacute;veloppeur est bien s&ucirc;r l'<a href="http://www.extremeprogramming.org/">Extreme Programming</a>. Il s'agit l&agrave; d'une des <a href="http://www.agilealliance.com/articles/index">m&eacute;thodes agiles</a> qui combinent plusieurs pratiques pour "lisser la courbe de co&ucirc;t" du d&eacute;veloppement logiciel. La plus extr&egrave;me reste le <a href="http://www.testdriven.com/modules/news/">d&eacute;veloppement pilot&eacute; par les tests</a>, o&ugrave; vous devez adh&eacute;rer &agrave; la r&egrave;gle du <cite>pas de code avant d'avoir un test</cite>. Si vous &ecirc;tes plut&ocirc;t du genre planninficateur ou que vous estimez que l'exp&eacute;rience compte plus que l'&eacute;volution, vous pr&eacute;f&eacute;rerez peut-&ecirc;tre l'approche <a href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a>. Je ne l'ai pas test&eacute; mais je peux voir o&ugrave; vous aurez besoin d'outils de test (cf. illustration 9).
            </p>
            <p>
                La plupart des testeurs unitaires sont dans une certaine mesure un clone de <a href="http://www.junit.org/">JUnit</a>, au moins dans l'interface. Il y a &eacute;norm&eacute;ment d'information sur le site de JUnit, &agrave; commencer par la <a href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a> quie contient pas mal de conseils g&eacute;n&eacute;raux sur les tests. Une fois mordu par le bogue vous appr&eacute;cierez s&ucirc;rement la phrase <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">infect&eacute; par les tests</a> trouv&eacute;e par Eric Gamma. Si vous &ecirc;tes encore en train de tergiverser sur un testeur unitaire, sachez que les choix principaux sont <a href="http://phpunit.sourceforge.net/">PHPUnit</a> et <a href="http://pear.php.net/manual/en/package.php.phpunit.php">Pear PHP::PHPUnit</a>. De nombreuses fonctionnalit&eacute;s de SimpleTest leurs font d&eacute;faut, mais la version PEAR a d'ores et d&eacute;j&agrave; &eacute;t&eacute; mise &agrave; jour pour PHP5. Elle est aussi recommand&eacute;e si vous portez des sc&eacute;narios de test existant depuis <a href="http://www.junit.org/">JUnit</a>.
            </p>
            <p>
                Les d&eacute;veloppeurs de biblioth&egrave;que n'ont pas l'air de livrer tr&egrave;s souvent des tests avec leur code : c'est bien dommage. Le code d'une biblioth&egrave;que qui inclut des tests peut &ecirc;tre remani&eacute; avec plus de s&eacute;curit&eacute; et le code de test sert de documentation additionnelle dans un format assez standard. Ceci peut &eacute;pargner la p&ecirc;che aux indices dans le code source lorsque qu'un probl&egrave;me survient, en particulier lors de la mise &agrave; jour d'une telle biblioth&egrave;que. Parmi les biblioth&egrave;ques utilisant SimpleTest comme testeur unitaire on retrouve <a href="http://wact.sourceforge.net/">WACT</a> et <a href="http://sourceforge.net/projects/htmlsax">PEAR::XML_HTMLSax</a>.
            </p>
            <p>
                Au jour d'aujourd'hui il manque tristement beaucoup de mati&egrave;re sur les objets fantaisie : dommage, surtout que tester unitairement sans eux repr&eacute;sente pas mal de travail en plus. L'<a href="http://www.sidewize.com/company/mockobjects.pdf">article original sur les objets fantaisie</a> est tr&egrave;s orient&eacute; Java, mais reste int&eacute;ressant &agrave; lire. Etant donn&eacute; qu'il s'agit d'une nouvelle technologie il y a beaucoup de discussions et de d&eacute;bats sur comment les utiliser, souvent sur des wikis comme <a href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme Tuesday</a> ou <a href="http://www.mockobjects.com/MocksObjectsPaper.html">www.mockobjects.com</a>ou <a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>. Injecter des objets fantaisie dans une classe est un des champs principaux du d&eacute;bat : cet <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">article chez IBM</a> en est un bon point de d&eacute;part.
            </p>
            <p>
                Il y a &eacute;normement d'outils de test web mais la plupart sont &eacute;crits en Java. De plus les tutoriels et autres conseils sont plut&ocirc;t rares. Votre seul espoir est de regarder directement la documentation pour <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>, <a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> ou <a href="http://jwebunit.sourceforge.net/">JWebUnit</a> et d'esp&eacute;rer y trouver pour des indices. Il y a aussi des frameworks bas&eacute;s sur XML, mais de nouveau la plupart ont besoin de Java pour tourner.
            </p>
        
    </div>
        References and related information...
        <ul>
<li>
            <a href="unit_test_documentation.html">Documentation pour SimpleTest</a>.
        </li>
<li>
            <a href="http://www.lastcraft.com/first_test_tutorial.php">Comment &eacute;crire des sc&eacute;narios de test en PHP</a> est un tutoriel plut&ocirc;t avanc&eacute;.
        </li>
<li>
            <a href="http://simpletest.sourceforge.net/">L'API de SimpleTest</a> par phpdoc.
        </li>
</ul>
<div class="menu_back">
<div class="menu">
<a href="index.html">SimpleTest</a>
                |
                <a href="overview.html">Overview</a>
                |
                <a href="unit_test_documentation.html">Unit tester</a>
                |
                <a href="group_test_documentation.html">Group tests</a>
                |
                <a href="mock_objects_documentation.html">Mock objects</a>
                |
                <a href="partial_mocks_documentation.html">Partial mocks</a>
                |
                <a href="reporter_documentation.html">Reporting</a>
                |
                <a href="expectation_documentation.html">Expectations</a>
                |
                <a href="web_tester_documentation.html">Web tester</a>
                |
                <a href="form_testing_documentation.html">Testing forms</a>
                |
                <a href="authentication_documentation.html">Authentication</a>
                |
                <a href="browser_documentation.html">Scriptable browser</a>
</div>
</div>
<div class="copyright">
            Copyright<br>Marcus Baker 2006
        </div>
</body>
</html>
